#include <baltam.hpp>
#include <cmath>

bool IsString(const bxArray* p) {
    // bxIsChar(const bxArray*) 判断是否为字符矩阵类型
    // bxIsString(const bxArray*) 判断是否为字符串矩阵类型
    if (bxIsChar(p) || bxIsString(p)) {
        return true;
    } else {
        return false;
    }
}

std::string GetTypeString(const bxArray *p) {
    // 该函数只是进一步封装将 const char* 转化为标准库 string
    // const char* bxTypeCstr(const bxArray*) 返回给定 bxArray 类型名
    std::string type = bxTypeCStr(p);
    return type;
}

bxArray* vector2BALTAM(const std::vector<std::vector<double>>& matrix, baSize row, baSize col) {
    // bxArray* bxCreateDoubleMatrix(baSize, baSize, bxComplexity) 创建一个双精度类型矩阵
    bxArray* array = bxCreateDoubleMatrix(row, col, bxREAL);
    // 获取创建矩阵数据的首地址, 用于写入数据
    double* pm = bxGetDoublesRW(array);
    // 写入数据
    for (size_t i = 0; i < row; i++) {
        size_t current_col = matrix[i].size();
        for (size_t j = 0; j < col; j++) {
            if (j < current_col) {
                // 北太天元按列存储数据
                pm[i + j * row] = matrix[i][j];
            } else {
                // 对于不足的数据填充 NaN
                pm[i + j * row] = nan("");
            }
        }
    }
    return array;
}
